Kebutuhan Rehashing
Untuk menjamin kinerja rata-rata yang diharapkan untuk pencarian dan penyisipan, faktor muatan (Faktor Muatan () harus dibatasi secara ketat, di mana adalah jumlah elemen dan adalah kapasitas tabel.
Jika diperbolehkan tumbuh tanpa batas, tabrakan meningkat secara eksponensial, dan kompleksitas waktu rata-rata menurun menuju .
| Kondisi | Aksi yang Dipicu | Dampak |
|---|---|---|
| Standar penyisipan | Efisiensi optimal terjaga. | |
| Perubahan Ukuran (Rehashing) | Mengembalikan kinerja, tetapi menimbulkan biaya sementara biaya. |
Ambang Batas Umum (): 0.70 hingga 0.75.
Proses Perubahan Ukuran
Perubahan ukuran memerlukan penghitungan ulang indeks hash untuk setiap item yang ada dalam tabel saat ini, proses yang dikenal sebagai Rehashing.
- Penentuan Kapasitas Baru: Pilih kapasitas baru , biasanya dua kali kapasitas saat ini (). Ini memastikan bahwa adalah separuh dari ambang batas kritis.
- Pembuatan Tabel: Alokasikan array tabel hash baru dengan ukuran .
- Iterasi Item: Putar melalui semua elemen yang ada dalam tabel lama.
- Re-hashing: Untuk setiap kunci , hitung indeks baru menggunakan modulus yang diperbarui:
- Penyisipan: Masukkan item ke dalam tabel baru pada .
Catatan: Karena modulus berubah, hanya menyalin array tidak mungkin; setiap item harus dimasukkan kembali.
Biaya Amortisasi
Mengapa Perubahan Ukuran adalah
Perubahan ukuran memerlukan pemrosesan semua elemen, artinya operasi itu sendiri membutuhkan waktu waktu, yang sementara melanggar tujuan penyisipan.
Analisis Amortisasi
Kami menggunakan Analisis Amortisasi untuk membenarkan biaya ini. Jika tabel menggandakan ukurannya setiap kali diperbesar (pertumbuhan eksponensial), biaya mahal akan tersebar di antara sejumlah besar penyisipan yang terjadi di antaranya penyisipan.
Biaya rata-rata dari setiap penyisipan tunggal, dengan mempertimbangkan perubahan ukuran berkala perubahan ukuran, tetap .
1. Sebuah peta hash memiliki kapasitas dan faktor muatan maksimum . Pada jumlah elemen berapa () perubahan ukuran harus dipicu?
2. Selama perubahan ukuran, mengapa kita tidak bisa sekadar menyalin elemen dari tabel lama ke tabel baru yang lebih besar?
3. Berapa kompleksitas waktu amortisasi dari penyisipan dalam tabel hash yang menggandakan ukurannya saat perubahan ukuran?
4. Apa konsekuensi utama dari tidak melakukan perubahan ukuran tabel hash ketika faktor muatannya terlalu tinggi?